perm filename CNVR.FIX[C,JRA] blob
sn#015007 filedate 1972-12-01 generic text, type T, neo UTF8
00100
00200
00300 (DEFPROP CNVR
00400 (NIL CNVR NEWCNUM REALITY1 MFINTERSECT INVISIBLE ORDERED DISPATCH GO1 VLOC TAG INDEX)
00500 VALUE)
00600
00700 (DEFPROP NEWCNUM
00800 (LAMBDA(LOW HIGH)
00900 (PROG (N INC INUSE)
01000 (SETQ N (// (PLUS LOW HIGH) 2) INUSE (CNUMSINUSE LOW HIGH) INC 1)
01100 LOOP (COND ((NOT(AND (GREATERP HIGH N)(GREATERP N LOW))) (CERR NO NEW CNUM BETWEEN (* LOW) AND (* HIGH)))
01200 ((MEMBER N INUSE) (SETQ N (PLUS N INC) INC (DIFFERENCE 0 (ADD1 INC))) (GO LOOP))
01300 ((RETURN N)))) )
01400 EXPR)
01500
01600 (DEFPROP REALITY1
01700 (LAMBDA(CMARKERS CFRAMES)
01800 (PROG (CM CON)
01900 (SETQ CON CFRAMES)
02000 LOOP (SETQ CM (MFINTERSECT))
02100 (COND ((NULL CM) (RETURN NIL)) ((NOT (INVISIBLE (CADR CM) CON)) (RETURN CM)))
02200 (SETQ CMARKERS (CDR CMARKERS) CFRAMES (CDR CFRAMES))
02300 (GO LOOP)))
02400 EXPR)
02500
02600 (DEFPROP MFINTERSECT
02700 (LAMBDA NIL
02800 (PROG (NM NF CM)
02900 ADVANCE
03000 (COND ((AND CMARKERS CFRAMES) (SETQ NF (CADAR CFRAMES) CM (CAR CMARKERS) NM (CAR CM))) ((RETURN NIL)))
03100 TEST (COND ((> NF NM) (GO A)) ((> NM NF) (GO B)) ((RETURN CM)))
03200 A (SETQ CFRAMES (CDR CFRAMES))
03300 (COND ((NULL CFRAMES) (RETURN NIL)))
03400 (SETQ NF (CADAR CFRAMES))
03500 (GO TEST)
03600 B (SETQ CMARKERS (CDR CMARKERS))
03700 (COND ((NULL CMARKERS) (RETURN NIL)))
03800 (SETQ CM (CAR CMARKERS))
03900 (SETQ NM (CAR CM))
04000 (GO TEST)))
04100 EXPR)
04200
04300 (DEFPROP INVISIBLE
04400 (LAMBDA(CNUMS CFRAMES)
04500 (AND (NOT (EQ CNUMS (QUOTE /+)))
04600 (OR (NULL CNUMS)
04700 (PROG (NC NF)
04800 (SETQ NC (CAR CNUMS))
04900 LOOP (COND (CFRAMES (SETQ NF (CADAR CFRAMES) CFRAMES (CDR CFRAMES))) ((RETURN NIL)))
05000 TEST (COND ((> NF NC) (GO LOOP)) ((> NC NF) (GO A)) ((RETURN NC)))
05100 A (SETQ CNUMS (CDR CNUMS))
05200 (COND ((NULL CNUMS) (RETURN NIL)))
05300 (SETQ NC (CAR CNUMS))
05400 (GO TEST)))))
05500 EXPR)
05600
05700 (DEFPROP ORDERED
05800 (LAMBDA(CLIST)
05900 (OR (NULL CLIST)
06000 (PROG NIL
06100 LOOP (COND ((NULL (CDR CLIST)) (RETURN T)) ((NOT (< (CADADR CLIST) (CADAR CLIST))) (RETURN NIL)))
06200 (SETQ CLIST (CDR CLIST))
06300 (GO LOOP))))
06400 EXPR)
06500
06600 (DEFPROP DISPATCH
06700 (LAMBDA(EXP1 RETAG SAVE ALINK1)
06800 (COND ((NUMBERP EXP1) (SETQ VAL EXP1) RETAG)
06900 ((ATOM EXP1) (SETQ VAL (IVAL EXP1 ALINK1)) RETAG)
07000 (T
07100 (PROG (V F)
07200 (SETQ F (CAR EXP1))
07300 BEGIN
07400 (COND
07500 ((ATOM F)
07600 (COND ((SETQ V (GETL F (QUOTE (CINT CEXPR FEXPR FSUBR)))) (GO (CAR V)))
07700 (T (SAVEUP) (SETQ UARGS (CDR EXP1) EARGS NIL) (GO A))))
07800 ((EQ (CAR F) (QUOTE CLAMBDA)) (SAVEUP)
07900 (BIND1 (QUOTE *BODY) (CDDR F))
08000 (SETQ VARS (CADR F) UARGS (CDR EXP1))
08100 (RETURN (QUOTE ARGB)))
08200 ((EQ (CAR F) (QUOTE LAMBDA)) (SAVEUP)
08300 (SETQ UARGS (CDR EXP1) EARGS NIL)
08400 (RETURN (QUOTE EVARGS)))
08500 ((EQ (CAR F) (QUOTE *CLOSURE)) (SETQ F (CADR F)) (GO BEGIN))
08600 (T (SETQ F (CERR UNKNOWN FUNCTION TYPE (@ . EXP1))) (GO BEGIN)))
08700 A (RETURN (QUOTE EVARGS))
08800 CINT (SAVEUP)
08900 (RETURN (CADR V))
09000 CEXPR
09100 (SAVEUP)
09200 (BIND1 (QUOTE *BODY) (CDADR V))
09300 (SETQ VARS (CAADR V) UARGS (CDR EXP1))
09400 (RETURN (QUOTE ARGB))
09500 FEXPR
09600 FSUBR
09700 (SETQ VAL (EVAL EXP1))
09800 (RETURN RETAG)))))
09900 EXPR)
10000
10100 (DEFPROP GO1
10200 (LAMBDA NIL
10300 (COND ((ATOM VAL)
10400 (PROG (FR TAG B)
10500 (SETQ FR ALINK TAG (QUOTE (: FOO)))
10600 (RPLACA (CDR TAG) VAL)
10700 LP (COND ((NULL FR) (SETQ VAL (CERR TAG NOT FOUND)) (QUOTE GO1))
10800 ((SETQ B (ASSQ (QUOTE *BODY) (BVARS FR)))
10900 (COND ((SETQ B (MEMBER TAG (CADR B))) (SETQ FRAME* FR) (RESTORE) (SETQ BODY B) (GO A)))))
11000 (SETQ FR (CLINK FR))
11100 (GO LP)
11200 A (RETURN (QUOTE LINE))))
11300 ((EQ (CAR VAL) (QUOTE *TAG)) (SETQ FRAME* (CADDR VAL)) (RESTORE))
11400 (T (SETQ VAL (CERR BAD TAG)) (QUOTE GO1))))
11500 EXPR)
11600
11700 (DEFPROP VLOC
11800 (LAMBDA N
11900 (PROG (FR LOC)
12000 (SETQ FR
12100 (COND ((= N 1) (COND ((SETQ LOC (ASSQ (ARG 1) BVARS)) (RETURN LOC))) ALINK)
12200 ((= N 2) (FR (ARG 2)))
12300 (T (CERR WRONG # OF ARGS))))
12400 LP (COND ((NULL FR) (RETURN (ASSQ (ARG 1) GLOBALS))) ((SETQ LOC (ASSQ (ARG 1) (BVARS FR))) (GO A)))
12500 (SETQ FR (ALINK FR))
12600 (GO LP)
12700 A (RETURN LOC)))
12800 EXPR)
12900
13000 (DEFPROP TAG
13100 (LAMBDA(NAME)
13200 (PROG (FR B TAG)
13300 (SETQ FR ALINK TAG (QUOTE (: FOO)))
13400 (RPLACA (CDR TAG) NAME)
13500 LP (COND ((NULL FR) (RETURN NIL))
13600 ((SETQ B (ASSQ (QUOTE *BODY) (BVARS FR)))
13700 (COND
13800 ((SETQ B (MEMBER TAG (CADR B))) (CHAUX FR)
13900 (SETQ B
14000 (LIST (QUOTE *TAG)
14100 NAME
14200 (CONS (CONS (LIST (CONS (QUOTE BODY) B))
14300 (QUOTE LINE))
14400 (CDR FR))))
14500 (GO A)))))
14600 (SETQ FR (CLINK FR))
14700 (GO LP)
14800 A (RETURN B)))
14900 EXPR)
15000
15100 (DEFPROP INDEX
15200 (LAMBDA(THING PATTERN INDEX)
15300 (PROG (NUM THINGS PFORM)
15400 (COND ((NULL INDEX) (BREAK BAD-INDEX--INDEX T))
15500 ((EQ (CAR INDEX) (QUOTE *LIST))
15600 (COND ((EQUAL (SETQ NUM (ADD1 (CADDR INDEX))) *INDEXTHRESHOLD) (RPLACA INDEX (QUOTE *INDEX))
15700 (SETQ THINGS
15800 (CDDDR INDEX)
15900 PFORM
16000 (CADR INDEX))
16100 (RPLACD
16200 (CDR INDEX)
16300 (LIST (LIST NIL) NIL))
16400 (MAPC (!" LAMBDA
16500 (THING)
16600 (INDEX
16700 THING
16800 (@ . PFORM)
16900 INDEX))
17000 THINGS))
17100 (T (RPLACD (CDR INDEX) (CONS NUM (CONS THING (CDDDR INDEX)))) (GO A))))
17200 ((EQ (CAR INDEX) (QUOTE *INDEX)) (SETQ PFORM (CADR INDEX)))
17300 ((BREAK BAD-INDEX--INDEX T)))
17400 (INDEX1 THING (CAR PATTERN) (CADDR INDEX) (QUOTE CAR) PFORM)
17500 (AND (CDR PATTERN) (INDEX1 THING (CDR PATTERN) (CDDDR INDEX) (QUOTE CDR) PFORM))
17600 A (RETURN THING)))
17700 EXPR)